package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.PO.DeviceElevatorAuthPO;
import com.itlong.cloud.POJO.PO.DeviceElevatorInfoPO;
import com.itlong.cloud.POJO.VO.property.CloudElevatorLiftDoorTypeVO;
import com.itlong.cloud.POJO.VO.property.EquipAuthUserGetVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      物业系统用户电梯设备权限数据访问接口
 * </desc>
 *
 * @createDate 2017-11-02
 */
@Mapper
@Repository
public interface IPropertyDeviceAuthElevatorAuthDao extends IAbstractBaseDao<DeviceElevatorAuthPO> {
    /**
     * <desc>
     *      获取用户电梯设备权限
     * </desc>
     * @param params
     * @return List<DeviceElevatorAuthPO> 用户电梯权限实体对象集
     * @author zhangs
     * @createDate 2017/10/11
     */
    List<DeviceElevatorAuthPO> getUserDeviceElevatorAuth(Map<String, Object> params);

    /**
     * <desc>
     *      获取住户临时权限(物业临时和一卡通)
     * </desc>
     * @param params
     * @return List<DeviceElevatorAuthPO> 用户电梯权限实体对象集
     * @author zhangs
     * @createDate 2018/1/29
     */
    List<DeviceElevatorAuthPO> getUserTempDeviceAuth(Map<String, Object> params);

    /**
     * <desc>
     *      删除用户电梯设备权限
     * </desc>
     * @param id 删掉的数据的Id
     * @return
     * @author zhangs
     * @createDate 2017/10/11
     */
    Integer deleteById(String id);

    /**
     * <desc>
     *      根据条件删除用户设备权限信息
     * </desc>
     * @param param 条件
     * @return
     * @author zhangs
     * @createDate 2017/12/5
     */
    Integer delByParam(Map<String, Object> param);

    /**
     * <desc>
     *      更新用户电梯设备权限
     * </desc>
     * @param deviceElevatorAuthPO
     * @return
     * @author zhangs
     * @createDate 2017/10/11
     */
    Integer update(DeviceElevatorAuthPO deviceElevatorAuthPO);

    /**
     * <desc>
     *      保存用户电梯设备权限
     * </desc>
     * @param params
     * @return
     * @author zhangs
     * @createDate 2017/10/11
     */
    Integer save(Map<String, Object> params);


    /**
     * <desc>
     *      查询拥有该设备权限的userId
     * <desc/>
     * @param    projectId 设备唯一码
     * @param   deviceType 设备类型
     * @param    deviceId 设备机号
     * @return 拥有该设备权限的userId集合
     * @author Biao.R
     * @createDate 2018/2/8
     */
    List<String> getAuthUserIdByDeviceUnique(@Param("projectId") String projectId,
                                             @Param("deviceType") String deviceType,
                                             @Param("deviceId")String deviceId);

    /**
     * <desc>
     *      批量保存用户电梯设备权限
     * </desc>
     * @param elevatorAuthBatchParams
     * @return
     * @author zhangs
     * @createDate 2018/02/28
     */
    Integer batchSave(List<Map<String, Object>> elevatorAuthBatchParams);

    /**
     * <desc>
     *      根据设备唯一码获取有设备权限的一卡通用户
     * <desc/>
     * @param  param
     * @return
     * @author Juguang.S
     * @createDate 2018/4/17
     */
    List<EquipAuthUserGetVO> getSmartCardUser(Map<String,Object> param);

    /**
     * <desc>
     *      判断该用户是否是注册过人脸用户
     * <desc/>
     *
     * @param userId 用户ID
     * @param projectId 项目编号
     * @author Juguang.S
     * @createDate 2019/03/20
     */
    Integer isFaceUser(@Param("userId") String userId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据设备唯一码查询设备正背门权限
     * <desc/>
     *
     * @param deviceTemp 设备唯一码数组
     * @author Qiang.S
     * @createDate 2019/05/22
     */
    List<CloudElevatorLiftDoorTypeVO> getDeviceLiftDoorTypeInfo(@Param("deviceTemp") String[] deviceTemp);

    /**
     * <desc>
     *      根据用户查询单元正背门权限
     * <desc/>
     *
     * @param userId 用户编号
     * @author Qiang.S
     * @createDate 2019/05/22
     */
    List<CloudElevatorLiftDoorTypeVO> getUserLiftDoorTypeInfo(@Param("userId") String userId);

    /**
     * <desc>
     *      根据电梯设备唯一码获取电梯绑定的群控器设备唯一码
     * </desc>
     *
     * @param deviceUniqueList 电梯设备唯一码列表
     * @return
     * @Author Zhu.yj
     * @createDate  2021/4/26
     */
    List<String> getControllerDeviceUniqueList(@Param("list") List<String> deviceUniqueList);

    /**
     * <desc>
     *      删除用户电梯权限
     * </desc>
     *
     * @param params 参数map
     * @return
     * @Author Zhu.yj
     * @createDate  2021/5/11
     */
    Integer deleteElevatorAuth(Map<String, Object> params);

}
